// 导入cookies的方法
import { getToken, setToken, delToken,setTimeStemp } from "@/utils/auth"
// 导入登录的接口
import { getInfoApi, loginApi,getBaseInfo } from "@/api/user"
import { Message } from "element-ui"
import {resetRouter} from '@/router'

// 管理用户的token
let state = {
  // token值
  token: getToken() || '',
  // 用户信息
  userInfo: {}
}
let mutations = {
  setToken(state, payload) {
    // 给token赋值
    state.token = payload,
      // cookies中储值
      setToken(payload)
    // 保存当前token的时间戳
    setTimeStemp(Date.now())
  },
  removeToken(state) {
    // 清除vuex中的token
    state.token = null,
      // 清除cookies的token值
    delToken()
  },
  // 给userInfo赋值
  setUserInfo(state, payload) {
    state.userInfo = payload
  },
  // 删除userInfo
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
let actions = {
  async login(ctx, data) {
    try {
      const res = await loginApi(data)
      ctx.commit('setToken', res.data.data)
    } catch (err) {
      Message.error(err.message)
      return Promise.reject(err)
    }
  },
// 请求用户信息
  async getUserInfo(ctx) {
    try {
      const res = await getInfoApi()
      // 获取用户头像
      const avatarInfo = await getBaseInfo(res.data.data.userId)
      // 将用户信息与用户头像合并
      const myInfo = {...res.data.data, ...avatarInfo.data.data}
      ctx.commit('setUserInfo', myInfo)
      // 将用户信息返回给外界
      return myInfo
    } catch (error) {
      return Promise.reject(error)
    }
  },
  // 退出登录
  logout({ commit }) {
    // 清除token
    commit('removeToken')
    // 清除用户信息
    commit('removeUserInfo')
    // 重置路由
     resetRouter()
}
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}